package lzupdater.utils;

//LZRosterUpdater, a java client to update LZRoster
//Copyright (C) 2008 Fraskor from Krasus (e-mail: fraskor@gmail.com)

//This file is part of LZRosterUpdater.

//LZRosterUpdater is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.

public abstract class Launcher {

	
	protected abstract String[] getCommandes(String program);
	
	public final Process launch(String program) {
		String[] cmds = getCommandes(program);
		if (cmds == null) return null;
		
		Process resultat = null;
		try {
			resultat = Runtime.getRuntime().exec(cmds);
		} catch (Exception e) {
			e.printStackTrace();
			resultat = null;
		}
		return resultat;
	}
	
	public static Launcher getInstance() {
		String currentOsName = System.getProperty("os.name");
		
		if (currentOsName == null) return new LauncherDefault();
		
		currentOsName = currentOsName.toLowerCase();
		
		if (currentOsName.contains("windows")) {
			return new LauncherWindows();
		}
		else if (currentOsName.contains("os x")) {
			return new LauncherMacOS();
		}
		else {
			return new LauncherDefault();
		}
	}

	private static class LauncherDefault extends Launcher {
		@Override
		protected String[] getCommandes(String program) {
			return null;
		}
		
	}
	

	
	private static class LauncherWindows extends Launcher {
		@Override
		protected String[] getCommandes(String program) {
			return new String[] {String.format("\"%s\"", program)};
		}
		
	}

	
	
	private static class LauncherMacOS extends Launcher {
		@Override
		protected String[] getCommandes(String program) {
			return new String[] {program};
		}
		
	}

	
	
}
